function ISG_FastSolutionAnalysis
	gameModel=GameModel; 
	model=gameModel.prepareForIsg();
	affineModel=gameModel.prepareForAffine;
	intervalModel=gameModel.prepareForIntervalSg;
	
	targets=model.targets;
    Uud    =model.Uud;
    Ucd    =model.Ucd;
    UuaMin =model.UuaMin;
    UuaMax =model.UuaMax;
	UcaMin =model.UcaMin;
	UcaMax =model.UcaMax;
	Tsize=length(targets);
    C=zeros(Tsize,1);
    maxPayoff=0;
    minPayoff=min(Uud);
    e=0.05;
	 
	Dv=minPayoff:e:maxPayoff;
	minRes_D=[];
	minResIndex_D=[];
	resCosts_D=[];
	totalCovAffine_D=[];
	totalCovInterval_D=[];
	
	Carr_D=[];
	total_D=[];
	target_D=[];
	
	resFunct = @(m) 5*m+2;
	
	lb = [minPayoff];
	ub = [maxPayoff];
	
	X0=minPayoff+(maxPayoff-minPayoff)/2;
	
	function profit=minFunc(D)
	    [ret,C, totalC, target]=feasibilityCheck(midPoint,C);
		profit=-(D-resFunct(totalC));
	end
	
	ObjectiveFunction = @minFunc;
	X0 = [0.5 0.5];   % Starting point
	[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0,lb,ub);
	
	function [ret,Carr, totalC, target]=feasibilityCheckWithAllSolution(midPoint,m,C)
		c1=zeros(1,Tsize);
		for t=1:Tsize
          c1(t)= get_c1(t);
        end
        for t=1:Tsize
            totalCov=c1(t);
            C(t)=c1(t);
            if C(t)>1
              continue  
            end
            R=get_R(c1(t),t);
            for tj=1:Tsize
                if(t==tj)
                    continue
                end
                c2=get_c2(R,tj);
                c3=get_c3(R,tj);
                minCov=max([c3,min(c1(t),c2)]);
                if minCov<0 || minCov>1
                    break
                end
                totalCov=totalCov+minCov;
                C(tj)=minCov;
            end
            if (minCov>=0 && minCov<=1) && totalCov<=m
                ret='true';
				totalC=[totalC,totalCov];
				Carr=[Carr,C];
				target=[target,t];
             end
        end
        if length(target)==0
			ret='false';
		end
		
		[fTotalC,I]=min(totalC);
		fCarr=Carr(I);
		target=Carr(I);
		
		
        return 
        
        
        function c1=get_c1(t)
            %cash=1-(midPoint-Uud(t))/(Ucd(t)-Uud(t));
            cash=(midPoint-Uud(t))/(Ucd(t)-Uud(t));
            c1=max([0,cash]);        
        end
        function c2=get_c2(R,t)
            %cash=1-(R-UuaMax(t))/(UcaMax(t)-UuaMax(t));
            upBound=max(UuaMax(t),UcaMax(t));
            lowBound=min(UuaMax(t),UcaMax(t));
            if R<lowBound 
                c2=2;
                return;
            end
            
            if R>upBound 
                c2=0;
                return;
            end
            cash=(R-UuaMax(t))/(UcaMax(t)-UuaMax(t));
            c2=max([0,cash]); 
        end
        function c3=get_c3(R,t)
            %cash=1-(R-UuaMin(t))/(UcaMin(t)-UuaMin(t));
            upBound=max(UuaMin(t),UcaMin(t));
            lowBound=min(UuaMin(t),UcaMin(t));
            if R<lowBound 
                c3=2;
                return;
            end
            
            if R>upBound 
                c3=0;
                return;
            end
            cash=(R-UuaMin(t))/(UcaMin(t)-UuaMin(t));
            c3=max([0,cash]); 
        end
        function R=get_R(c1,t)
            R=(c1*UcaMin(t))+((1-c1)*UuaMin(t)-e);
        end
	
	
	
	
	
	
	
	function [C, totalCov]=interCoverageDistribution(model, midPoint, trgt)
	
		Uud    =gameModel.Uud;
        Ucd    =gameModel.Ucd;
        Uua    =gameModel.Uua;
        Uca    =gameModel.Uca;
		C      =gameModel.coverageVector;
		Tsize=length(C);
        e=0.05;
		
        c1(trgt)= get_c1(trgt);
		totalCov=c1(trgt);
		C(trgt)=c1(trgt);
		R=get_R(c1(trgt),trgt);
		for tj=1:Tsize
			if(trgt==tj)
				continue
			end
			c2=get_c2(R,tj);
			minCov=min(c1(tj),c2);
			totalCov=totalCov+minCov;
			C(tj)=minCov;
		end
        return 
        function c1=get_c1(t)
                %cash=1-(midPoint-Uud(t))/(Ucd(t)-Uud(t));
                cash=(midPoint-Uud(t))/(Ucd(t)-Uud(t));
                c1=max(cash,0);        
        end
		function c2=get_c2(R,t)
			upBound=max(Uua(t),Uca(t));
			lowBound=min(Uua(t),Uca(t));
			if R<lowBound 
				c2=2;
				return;
			end

			if R>upBound 
				c2=0;
				return;
			end
			cash=(R-Uua(t))/(Uca(t)-Uua(t));
			c2=max(cash,0); 
		end
		function R=get_R(c1,t)
			R=(c1*Uca(t))+((1-c1)*Uua(t)-e);
		end
end